//
// Created by zx208 on 2024/10/16.
//

// 编程将线性表中每个元素循环右移k位
// 要求只用一个辅助单元，时间复杂度为O（n）

#include "../SequenceList.h"

Status MovingK(SqList *L, int k){
    ElemType temp;

    // 思路：
    // 先将整体进行逆置
    for (int i = 0, j = L->length - 1; i < j; ++i, --j) {
        temp = L->elem[i];
        L->elem[i] = L->elem[j];
        L->elem[j] = temp;
    }

    // 然后将n-(k%length)之前的数进行逆置
    for (int i = 0, j = L->length-(k%L->length)-1; i < j; ++i, --j) {
        temp = L->elem[i];
        L->elem[i] = L->elem[j];
        L->elem[j] = temp;
    }

    return OK;
}

int main(void){
    SqList L;
    int a[] = {1,2,4,5,6};
    int k = 10;
    L.elem = a;
    L.length = sizeof a / sizeof( int);
    MovingK(&L, k);
    for (int i = 0; i < L.length; ++i) {
        printf("%d ", L.elem[i]);
    }
    return 0;
}